<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
<a id="out2csv" href="#">导出csv</a>

<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<!--<script src="downLoadCSV.js"></script>-->
<script type="text/javascript">
  /*
参数1 data对象
 data导入的数据类型 一个数组对象
 heads头部名称
 columns要输出的字段名
 remove_targets是否需要过滤html标签
 spe_column需要处理的数字字段 会在之前加`
 例子：
{
 'data':[{id:1,name:'a',sort:10},{id:2,name:'b',sort:9},{id:3,name:'c',sort:8}],
 'heads':['id号','姓名'],
 'columns':['id','name'],
 'remove_targets':false,
 'spe_column':['id'],
}
参数2 fun获取csv内容后的回调函数
*/
  var data2csv = function (data = {}, fun = function (str) {
    return str
  }) {
    //验证并处理参数
    if (data.heads.length != data.columns.length) {
      return {'code': false, 'msg': '表头和内容字段数不符'};
    }
    if (!data.remove_targets) {
      data.remove_targets = false;
    } else {
      data.remove_targets = true;
    }
    csv_data = data.data;
    heads = data.heads;
    columns = data.columns;
    spe_column = data.spe_column;
    remove_targets = data.remove_targets;
    // 构造csv内容
    var str = "";
    for (var j in csv_data) {
      e = csv_data[j];
      for (var i in columns) {
        c = e[columns[i]];
        if (remove_targets) {
          c = c.replace(/<[^>]+>/g, "") + ",";
        }
        if (spe_column.length > 0 && spe_column.indexOf(columns[i]) > -1) {
          // c = '`'+c;//表格前添加自定义内容
        }
        str += c;
      }
      str += "\n";
    }
    head_str = "";
    for (var i in heads) {
      head_str += heads[i] + ",";
    }
    head_str += "\n";
    str = head_str + str;
    return fun(str);
  };
  //生成并下载文件
  function download_file(file_name, content, o = true) {
    if (o) {
      content = '\ufeff' + content
    }
    var aTag = document.createElement('a');
    var blob = new Blob([content]);
    aTag.download = file_name;
    aTag.href = URL.createObjectURL(blob);
    aTag.click();
    URL.revokeObjectURL(blob);
  };
  /*参数*/
  var csv = [
    {
      'io': '0',
      'num': '10',
      'em_name': '3日人民币对美元汇率中间价下调373个基点\thttp://www.xinhuanet.com/fortune/2020-02/03/c_1125525254.htm\n' +
        '新华社上海2月3日电（记者程思琪）来自中国外汇交易中心的数据显示，3日人民币对美元汇率中间价报6.9249，较前一交易日下调373个基点。\n' +
        '中国人民银行授权中国外汇交易中心公布，2020年2月3日银行间外汇市场人民币汇率中间价为：1美元对人民币6.9249元，1欧元对人民币7.6750元，100日元对人民币6.3863元，1港元对人民币0.89163元，1英镑对人民币9.1290元，1澳大利亚元对人民币4.6348元，1新西兰元对人民币4.4744元，1新加坡元对人民币5.0761元，1瑞士法郎对人民币7.1861元，1加拿大元对人民币5.2299元，人民币1元对0.59159马来西亚林吉特，人民币1元对9.2295俄罗斯卢布，人民币1元对2.1657南非兰特，人民币1元对172.22韩元，人民币1元对0.53031阿联酋迪拉姆，人民币1元对0.54167沙特里亚尔，人民币1元对43.9126匈牙利福林，人民币1元对0.55926波兰兹罗提，人民币1元对0.9736丹麦克朗，人民币1元对1.3899瑞典克朗，人民币1元对1.3297挪威克朗，人民币1元对0.86316土耳其里拉，人民币1元对2.7217墨西哥比索，人民币1元对4.4971泰铢。\n' +
        '前一交易日，人民币对美元汇率中间价报6.8876。,测试生成项目,0,?',
      'money': '0',
    },
    {
      'io': '0',
      'num': '10',
      'em_name': '0',
      'money': '0',
    }
  ];
  var head = [
    '交易类型',
    '订单号',
    '操作人姓名及编号',
    '原价总额',
  ];
  var column = [
    'io',
    'num',
    'em_name',
    'money'
  ];
  var num_column = ['num'];
  data2csv({
    'data': csv,
    'heads': head,
    'columns': column,
    'spe_column': num_column,
    'remove_targets': true,
  }, function (content) {
    console.log(content);
    // download_file('order_list.csv',content,true)
    $('#out2csv').on('click', function () {
      download_file('order_list.csv', content, true)
    })
  });
</script>
</body>
</html>